package com.chris.code.generate.springboot;

import com.chris.assist.builders.springboot.supports.SpringbootBuildManager;
import com.chris.assist.builders.springboot.supports.SpringbootBuildParams;
import com.chris.assist.config.Config;
import com.chris.code.generate.manager.LocalTestConfigBuilder;

/**
 * @author Chris Chan
 * Create On 2023/3/20 17:18
 * Use for: Springboot 资源创建示例
 * Explain:
 * 成功
 */
public class SpringbootBuildTest {
    public static void main(String[] args) {
        // 1. 获取配置
        Config config = LocalTestConfigBuilder.create().get();
        // 2. 创建管理器 3. 并创建
        buildWebApis(config);
    }

    /**
     * 构建Entity资源
     * 使用默认参数构建Entity资源
     * 每一种资源的构建都可以使用默认方式
     * matchTableNamePrefixes() 方法可以指定要创建的资源的表名前缀
     */
    private static void buildEntitiesWithDefault(Config config) {
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createEntity();
    }

    /**
     * 构建Entity资源
     */
    private static void buildEntities(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("domain.entity")
                .setModelSuffix("Entity")
                .setModelTagSuffix("Jpa数据操作实体类");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createEntity(buildParams);
    }

    /**
     * 构建CreateParam资源
     */
    private static void buildWebCreateParams(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.model.params.create")
                .setModelSuffix("CreateParam")
                .setModelTagSuffix("数据创建请求参数");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebCreateParam(buildParams);
    }

    /**
     * 构建UpdateParam资源
     */
    private static void buildWebUpdateParams(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.model.params.update")
                .setModelSuffix("UpdateParam")
                .setModelTagSuffix("数据更新请求参数");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebUpdateParam(buildParams);
    }

    /**
     * 构建SearchParam资源
     */
    private static void buildWebSearchParams(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.model.params.search")
                .setModelSuffix("SearchParam")
                .setModelTagSuffix("查询参数");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebSearchParam(buildParams);
    }

    /**
     * 构建OrderParam资源
     */
    private static void buildWebOrderParams(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.model.params.order")
                .setModelSuffix("OrderParam")
                .setModelTagSuffix("排序参数");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebOrderParam(buildParams);
    }

    /**
     * 构建Result资源
     */
    private static void buildWebResults(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.model.results")
                .setModelSuffix("Result")
                .setModelTagSuffix("Http数据查询结果");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebResult(buildParams);
    }

    /**
     * 构建所有数据类型资源
     */
    private static void buildModels(Config config) {
        // 此处拿不到模版，模版暂时在构建器中配置
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createModels();
    }

    /**
     * 构建Repository资源
     */
    private static void buildRepositories(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("dao.repository")
                .setModelSuffix("Repository")
                .setModelTagSuffix("Jpa数据操作仓库类");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createRepository(buildParams);
    }

    /**
     * 构建Converter资源
     */
    private static void buildConverters(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("service.assistants.converters")
                .setModelSuffix("Converter")
                .setModelTagSuffix("数据转换类");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createServiceAssistantConverter(buildParams);
    }

    /**
     * 构建Assistant资源
     */
    private static void buildAssistants(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("service.assistants")
                .setModelSuffix("Assistant")
                .setModelTagSuffix("服务助手类");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createServiceAssistant(buildParams);
    }

    /**
     * 构建Service资源
     */
    private static void buildServices(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("service.def")
                .setModelSuffix("Service")
                .setModelTagSuffix("业务处理服务 定义");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createService(buildParams);
    }

    /**
     * 构建ServiceImpl资源
     */
    private static void buildServiceImpls(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("service.impl")
                .setModelSuffix("ServiceImpl")
                .setModelTagSuffix("业务处理服务 实现");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createServiceImpl(buildParams);
    }

    /**
     * 构建Api资源
     */
    private static void buildWebApis(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.api")
                .setModelSuffix("Api")
                .setModelTagSuffix("接口 定义");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebApi(buildParams);
    }

    /**
     * 构建Controller资源
     */
    private static void buildWebControllers(Config config) {
        // 模版暂时在构建器中配置
        SpringbootBuildParams buildParams = SpringbootBuildParams.create()
                .setPackageName("web.controller")
                .setModelSuffix("Controller")
                .setModelTagSuffix("接口 实现");
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createWebController(buildParams);
    }

    /**
     * 构建MvcBusiness资源
     */
    private static void buildMvcBusiness(Config config) {
        // 此处拿不到模版，模版暂时在构建器中配置
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createMvcBusiness();
    }

    /**
     * 构建所有数据类型和业务线资源
     * 简单三步
     */
    private static void buildAll(Config config) {
        SpringbootBuildManager.get(config).matchTableNamePrefixes("trade_").createAll();
    }
}
